package com.kh.rationaldrugreview.enums;

/**
 * 风险因子枚举
 * Risk Factor Enumeration
 */
public enum RiskFactor {
    
    // 妊娠相关风险 - 最高优先级
    PREGNANCY_CATEGORY_X(100, "FDA妊娠分级X级", "绝对禁用于孕妇，已证实对胎儿有害"),
    PREGNANCY_CATEGORY_D(70, "FDA妊娠分级D级", "有胎儿风险的证据，但获益可能超过风险"),
    PREGNANCY_CATEGORY_C(40, "FDA妊娠分级C级", "动物研究显示不良作用，人体研究不足"),
    PREGNANCY_CATEGORY_B(10, "FDA妊娠分级B级", "动物研究无害，但人体研究不足"),
    PREGNANCY_CATEGORY_A(0, "FDA妊娠分级A级", "孕期使用安全"),
    
    // 禁忌症相关风险
    ABSOLUTE_CONTRAINDICATION(90, "绝对禁忌", "患者绝对不能使用该药物"),
    RELATIVE_CONTRAINDICATION(50, "相对禁忌", "需要权衡利弊，谨慎使用"),
    
    // 药物相互作用风险
    SEVERE_INTERACTION(80, "严重药物相互作用", "可能导致严重不良后果"),
    MODERATE_INTERACTION(30, "中度药物相互作用", "需要监测或调整剂量"),
    MILD_INTERACTION(10, "轻度药物相互作用", "临床意义较小"),
    
    // 器官功能相关风险
    RENAL_SEVERE_IMPAIRMENT(60, "重度肾功能不全", "需要显著调整剂量或禁用"),
    RENAL_MODERATE_IMPAIRMENT(35, "中度肾功能不全", "需要调整剂量"),
    RENAL_MILD_IMPAIRMENT(15, "轻度肾功能不全", "需要监测"),
    
    HEPATIC_SEVERE_IMPAIRMENT(60, "重度肝功能不全", "需要显著调整剂量或禁用"),
    HEPATIC_MODERATE_IMPAIRMENT(35, "中度肝功能不全", "需要调整剂量"),
    HEPATIC_MILD_IMPAIRMENT(15, "轻度肝功能不全", "需要监测"),
    
    // 年龄相关风险
    AGE_RESTRICTION(30, "年龄限制", "患者年龄不在推荐使用范围内"),
    PEDIATRIC_CONCERN(25, "儿童用药关注", "儿童使用需特别注意"),
    GERIATRIC_CONCERN(25, "老年用药关注", "老年患者使用需特别注意"),
    
    // 性别相关风险
    GENDER_SPECIFIC(20, "性别限制", "存在性别特异性风险"),
    LACTATION_CONCERN(45, "哺乳期关注", "可能通过乳汁影响婴儿"),
    
    // 剂量相关风险
    OVERDOSE_RISK(55, "剂量过量风险", "剂量超过安全范围"),
    UNDERDOSE_RISK(20, "剂量不足风险", "剂量可能无法达到治疗效果"),
    
    // 特殊疾病状态风险
    DIABETES_CONCERN(25, "糖尿病关注", "可能影响血糖控制"),
    HYPERTENSION_CONCERN(25, "高血压关注", "可能影响血压控制"),
    CARDIAC_CONCERN(40, "心脏疾病关注", "存在心脏安全性风险"),
    
    // 过敏相关风险
    ALLERGY_RISK(85, "过敏风险", "患者对该药物存在过敏风险"),
    CROSS_ALLERGY_RISK(50, "交叉过敏风险", "可能存在交叉过敏反应"),
    
    // 重复用药风险
    DUPLICATE_THERAPY(35, "重复用药", "存在相同成分的药物"),
    THERAPEUTIC_DUPLICATION(25, "治疗重复", "存在相同治疗作用的药物"),
    
    // 监测相关
    REQUIRES_MONITORING(15, "需要监测", "使用时需要定期监测相关指标"),
    REQUIRES_DOSE_ADJUSTMENT(20, "需要剂量调整", "根据患者情况需要调整剂量");
    
    private final int score;
    private final String name;
    private final String description;
    
    RiskFactor(int score, String name, String description) {
        this.score = score;
        this.name = name;
        this.description = description;
    }
    
    public int getScore() {
        return score;
    }
    
    public String getName() {
        return name;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 获取风险等级
     */
    public RiskLevel getRiskLevel() {
        return RiskLevel.fromScore(this.score);
    }
    
    /**
     * 判断是否为妊娠相关风险
     */
    public boolean isPregnancyRelated() {
        return this.name().startsWith("PREGNANCY_CATEGORY");
    }
    
    /**
     * 判断是否为器官功能相关风险
     */
    public boolean isOrganFunctionRelated() {
        return this.name().contains("RENAL_") || this.name().contains("HEPATIC_");
    }
    
    /**
     * 判断是否为高严重性风险因子
     */
    public boolean isHighSeverity() {
        return this.score >= 60;
    }
}